#ifndef __PID_H__
#define __PID_H__

#include "main.h"
typedef struct
{
    float SetValue;     // 用户期望值，也就是我们期望系统调节到输出此值然后稳定在这一状态
    float pid_Calc_out; // PID计算输出结果值，用来驱动执行机构
    float error;        // 当前偏差值
    float error_last;   // 上一次计算的偏差值
    float error_pre;    // 上上一次计算的偏差值，在增量式里用到
    float Kp;           // 比例系数
    float Ki;           // 积分系数
    float Kd;           // 微分系数
    float integral;     // 积分值
    float integral_max; // 积分最大值
} PID;                  // 结构体，方便管理

extern PID GW_gray_PID; // 定义一个PID结构体变量GW_gray_PID,用于灰度传感器PID控制
extern PID Yaw_PID; // 定义一个PID结构体变量Yaw_PID,用于舵机PID控制
extern PID Find_blobs_PID; // 定义一个PID结构体变量Find_blobs_PID,用于摄像头寻找色块控制
extern PID Go_Target_PID; // 定义一个PID结构体变量Go_Target_PID,用于前进到目标色块控制
float PID_Calc(PID *pPID_Calc, float Next_val, float actual, uint8_t flag);
int PID_Calc_only_int(PID *pPID_Calc, float Next_val, float actual);
float PID_encoder_calc(PID *pPID_Calc, float Next_val, float actual, uint8_t flag);





#endif
